package com.leetcode.string;

import java.util.HashMap;

public class LongestSubstring {
    public int lengthOfLongestSubstring(String s) {
        //hashmap存字符的最后一次索引
        HashMap<Character, Integer> map = new HashMap<>();
        //i表示左边界，最后一个已重复字符的索引
        int i = -1, result = 0;

        //遍历charAt
        for(int j = 0; j < s.length(); j++){
            char c = s.charAt(j);
            //如果出现重复才更新左边界，右边界就是j，两者构成滑窗
            if(map.containsKey(c)){
                i = Math.max(i, map.get(c));
            }
            //更新hashmap
            map.put(c, j);
            //计算滑窗的最大长度
            result = Math.max(result, j - i);
        }
        return result;
    }
}
